import axios from 'axios'
import { Toast } from 'vant'
import store from '@/store'
import router from '@/router'
import { authorizations } from '@/api/user.js'

const _axios = axios.create({
  baseURL: process.env.VUE_APP_URL
})
// 请求拦截
_axios.interceptors.request.use(
  config => {
    if (!config.noToken) {
      config.headers.Authorization = `Bearer ${store.getters['user/getToken']}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截
_axios.interceptors.response.use(
  res => {
    return res.data
  },
  async error => {
    // response 后端返回数据 这个打印出来可以看到
    // console.dir(error)
    if (
      !error.config.noError &&
      error.response.data &&
      error.response.data.message
    ) {
      // toast.fail 弹窗错误信息
      Toast.fail(error.response.data.message)
    }

    // try{
    //   要捕获错误的代码
    // }
    // cathch {
    //   捕获到错误后，要执行的代码
    // }

    if (error.response.status === 401) {
      try {
        // 获取刷新token的接口，可能会报错，一般是 刷新token也失效了
        const restoken = await authorizations()
        console.log('restoken:', restoken)
        store.commit('user/setToken', restoken.data.token)
        // error.config 上一次请求的参数， 请求内容、方式、请求头、请求地址 
        return _axios(error.config)
      }
      catch {
        if (
          !error.config.noError &&
          error.response.data &&
          error.response.data.message
        ) {
          // toast.fail 弹窗错误信息
          Toast.fail(error.response.data.message)
        }
        store.commit('user/setToken', '')
        router.push('login?redirect=' + router.currentRoute.fullPath)
      }



      // 删除token
      // store===this.$store
      store.commit('user/setToken', '')
      // 跳转到登录页,router.currentRoute当前路由信息
      // console.log('router', router.currentRoute.fullPath)
      router.push('/login?redirect=' + router.currentRoute.fullPath)
      // router.push('/login?redirect=' + location.href.split('#')[1])
    } else {
      if (
        !error.config.noError &&
        error.response.data &&
        error.response.data.message
      ) {
        Toast.fail(error.response.data.message)
      }
    }

    return Promise.reject(error)
  }
)
export default _axios
